﻿using UnityEngine;
using UnityEngine.UI;
using TMPro;
using System.Collections;

namespace TowerDefence
{
    public class TowerUpgradeShopButton : MonoBehaviour
    {
        public TowerUpgradeShopButton refTowerButton;   // 参考的塔升级商店按钮
        PlayerDataManager playerDataManager;            // 玩家数据管理器
        MainMenuManager main;                           // 主菜单管理器
        public Sprite interactableButton;               // 可交互按钮的图标
        public Sprite disabledButton;                   // 禁用按钮的图标

        public Button button;                            // 按钮组件
        [Header("Tower Upgrade Type")]
        [Range(1, 12)]
        public int towerTypeIndex = 1;                  // 塔的类型索引（箭塔，火塔，炮塔，毒塔等）
        public TowerData[] towers;                       // 塔的数据数组
        public int[] upgradeCosts;                       // 升级花费数组

        [Space]
        public int indexLimit;                           // 索引限制
        public int requiredTowerIndex;                  // 所需塔的索引
        [Space]
        public string towerName;                        // 塔的名称
        [TextArea(7, 8)]
        public string[] statIncreases;                  // 属性增加的描述数组
        [TextArea(7, 8)]
        public string[] statDescription;                // 属性描述的数组

        [Range(1, 2)]
        public int upgradeIndex;                        // 升级索引

        public bool isComplete;                         // 是否完成升级

        [Header("Tower UI")]
        public TextMeshProUGUI costText;                // 花费文本
        public TextMeshProUGUI indexText;               // 索引文本
        public TextMeshProUGUI towerNameText;           // 塔名称文本
        public TextMeshProUGUI statIncreasesText;       // 属性增加文本
        public TextMeshProUGUI statDescriptionText;     // 属性描述文本

        public int buttonIndex = 0;                      // 按钮索引

        void OnEnable()
        {
            switch (towerTypeIndex)
            {
                case 1:
                    // 当塔类型索引为1时，将按钮索引设置为箭塔01索引
                    buttonIndex = PlayerDataManager.arrowTowerIndex01;
                    break;
                case 2:
                    // 当塔类型索引为2时，将按钮索引设置为箭塔02索引
                    buttonIndex = PlayerDataManager.arrowTowerIndex02;
                    break;
                case 3:
                    // 当塔类型索引为3时，将按钮索引设置为箭塔03索引
                    buttonIndex = PlayerDataManager.arrowTowerIndex03;
                    break;
                case 4:
                    // 当塔类型索引为4时，将按钮索引设置为火塔01索引
                    buttonIndex = PlayerDataManager.fireTowerIndex01;
                    break;
                case 5:
                    // 当塔类型索引为5时，将按钮索引设置为火塔02索引
                    buttonIndex = PlayerDataManager.fireTowerIndex02;
                    break;
                case 6:
                    // 当塔类型索引为6时，将按钮索引设置为火塔03索引
                    buttonIndex = PlayerDataManager.fireTowerIndex03;
                    break;
                case 7:
                    // 当塔类型索引为7时，将按钮索引设置为炮塔01索引
                    buttonIndex = PlayerDataManager.cannonTowerIndex01;
                    break;
                case 8:
                    // 当塔类型索引为8时，将按钮索引设置为炮塔02索引
                    buttonIndex = PlayerDataManager.cannonTowerIndex02;
                    break;
                case 9:
                    // 当塔类型索引为9时，将按钮索引设置为炮塔03索引
                    buttonIndex = PlayerDataManager.cannonTowerIndex03;
                    break;
                case 10:
                    // 当塔类型索引为10时，将按钮索引设置为毒塔01索引
                    buttonIndex = PlayerDataManager.poisonTowerIndex01;
                    break;
                case 11:
                    // 当塔类型索引为11时，将按钮索引设置为毒塔02索引
                    buttonIndex = PlayerDataManager.poisonTowerIndex02;
                    break;
                case 12:
                    // 当塔类型索引为12时，将按钮索引设置为毒塔03索引
                    buttonIndex = PlayerDataManager.poisonTowerIndex03;
                    break;
            }

            UpdateBaseTextUI(); // 更新基础文本UI信息

        }

        void Start()
        {
            // 获取玩家数据管理器的实例
            playerDataManager = PlayerDataManager.instance;

            // 获取主菜单管理器的实例
            main = MainMenuManager.instance;
        }

        public void OnClickBaseUpgrade()
        {
            // 如果参考塔按钮不为空且升级未完成，则退出函数
            if (refTowerButton != null && !refTowerButton.isComplete)
                return;

            // 如果按钮索引超过索引限制，则退出函数
            if (buttonIndex >= indexLimit)
                return;

            // 如果玩家金钱小于升级成本，则退出函数
            if (PlayerDataManager.Money < upgradeCosts[buttonIndex])
                return;

            // 扣除升级成本并更新主菜单的货币显示
            PlayerDataManager.Money -= upgradeCosts[buttonIndex];
            main.UpdateCurrency();

            // 添加升级塔
            if (upgradeIndex == 1)
                towers[buttonIndex].upgrade01 = towers[buttonIndex + 1];
            if (upgradeIndex == 2)
                towers[buttonIndex].upgrade02 = towers[buttonIndex + 1];

            // 增加按钮索引
            buttonIndex++;

            // 根据塔类型索引更新对应的升级索引，用于加载数据时跟踪升级状态
            switch (towerTypeIndex)
            {
                case 1:
                    PlayerDataManager.arrowTowerIndex01++;
                    break;
                case 2:
                    PlayerDataManager.arrowTowerIndex02++;
                    break;
                case 3:
                    PlayerDataManager.arrowTowerIndex03++;
                    break;
                case 4:
                    PlayerDataManager.fireTowerIndex01++;
                    break;
                case 5:
                    PlayerDataManager.fireTowerIndex02++;
                    break;
                case 6:
                    PlayerDataManager.fireTowerIndex03++;
                    break;
                case 7:
                    PlayerDataManager.cannonTowerIndex01++;
                    break;
                case 8:
                    PlayerDataManager.cannonTowerIndex02++;
                    break;
                case 9:
                    PlayerDataManager.cannonTowerIndex03++;
                    break;
                case 10:
                    PlayerDataManager.poisonTowerIndex01++;
                    break;
                case 11:
                    PlayerDataManager.poisonTowerIndex02++;
                    break;
                case 12:
                    PlayerDataManager.poisonTowerIndex03++;
                    break;
            }
            indexText.text = buttonIndex + "/" + indexLimit;

            // 防止索引错误发生，通过退出函数进行保护
            if (buttonIndex >= indexLimit)
            {
                // 设置完成标志为true，禁用按钮，并显示禁用按钮的图标
                isComplete = true;
                button.interactable = false;
                button.image.sprite = disabledButton;

                // 保存玩家进度
                playerDataManager.SaveProgress(playerDataManager);

                // 退出函数
                return;
            }

            // 更新基础文本界面
            UpdateBaseTextUI();

            // 保存玩家进度
            playerDataManager.SaveProgress(playerDataManager);

        }

        public void UpdateBaseTextUI()
        {
            // 将索引存储在本地变量中
            int index = buttonIndex;

            // 如果索引超过限制，则将完成标志设置为true，调整索引为限制的前一个值，并禁用按钮，并显示禁用按钮的图标
            if (index >= indexLimit)
            {
                isComplete = true;
                index = indexLimit - 1;
                button.interactable = false;
                button.image.sprite = disabledButton;
            }
            else
            {
                // 否则，启用按钮，并显示可交互按钮的图标
                button.interactable = true;
                button.image.sprite = interactableButton;
            }

            // 更新界面文本信息
            indexText.text = buttonIndex.ToString() + "/" + indexLimit;
            towerNameText.text = towerName.ToString();
            statIncreasesText.text = statIncreases[index].ToString();
            statDescriptionText.text = statDescription[index].ToString();
            costText.text = upgradeCosts[index].ToString();
        }


    }
}